iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
0
Software Development

Unity遊戲開發與實踐-BlueRemedy內容分享系列 第 23

[Day23]關卡位置紀錄點&回傳

  • 分享至 

  • xImage
  •  

在遊戲中不免會遇到死亡或掉下陷阱的問題,但身為遊戲製作者,總不能讓玩家死亡後總是從頭開始吧。就像馬力歐冒險的關卡中,一定會在關卡中間放置一面旗幟,即便死亡後也會從那個旗幟位置再開始。

今天的分享就是要來做出這個旗幟的效果,不過在BlueRemedy關卡中並不會有明顯類似旗幟的物件做為紀錄點,而是會在許多地方(例如懸崖邊、機關前等等)設置隱形的觸發器,經過時記下位置。

以下面這張圖為例,這是遊戲中的一個二段跳的教學地形,深谷中有許多尖刺,如果玩家掉下去基本上是很難再跳上來。
https://ithelp.ithome.com.tw/upload/images/20200923/20130414BjBVnbzBFJ.jpg

紀錄點

Step1:

為了避免玩家卡關而死亡,我們必須在深谷兩側放置紀錄位置的trigger (以製作左邊的trigger為教學) ,先建立一個空物件"RecordPoint" 並設定BoxCollider2D為trigger
https://ithelp.ithome.com.tw/upload/images/20200923/201304142LFs4dgJXj.jpg

Step2:

接著我們在trigger物件中心曾一個腳本RecordPointManager.cs
https://ithelp.ithome.com.tw/upload/images/20200923/20130414mWaCXXq86S.jpg

這個腳本中需要做的事情很簡單

  • 一組靜態變數,用來儲存最後抵達的紀錄點座標
  • OnTriggerEnter2D函式判斷當主角進入時,記錄下紀錄點的位置
  • 一個靜態公開函示讓外部可以取得紀錄點座標
    https://ithelp.ithome.com.tw/upload/images/20200923/20130414HExobTOhdO.jpg

於是當主角進入時,這個腳本中的playerRecordPos就會更新為最新的這個紀錄點位置。

Step3:

然後可以把這個物件做成Prefab,當需要設定紀錄點時只需要從Project視窗中拉出就可以。
https://ithelp.ithome.com.tw/upload/images/20200923/20130414Z7QXrwGTCk.jpg
https://ithelp.ithome.com.tw/upload/images/20200923/201304141IiNuFL38g.jpghttps://ithelp.ithome.com.tw/upload/images/20200923/20130414HNDgH2Ux16.jpg

回傳功能

完成紀錄點後,接這設定回傳功能!

首先要先想好,怎樣的情況要強制把主角傳回上一個紀錄點? 也許是掉入陷阱被刺了1秒、也許是不小心穿牆掉到地圖外。

Step1:

不論如何似乎都需要有個區域範圍,用來判斷是否玩家在需要被傳回的位置。因此第一步要先創一個物件"TransbackTrigger”,並設定好底下的trigger
https://ithelp.ithome.com.tw/upload/images/20200923/20130414uOtuwIQOwl.jpg

Step2:

接著建立TransbackManager腳本元件
https://ithelp.ithome.com.tw/upload/images/20200923/20130414ndTfNjSN9m.jpg

最最基本的方式是當主角進入時,將她的位置傳回上一個紀錄點

Step3:

不過以這個尖刺機關來說,剛被刺到就傳回似乎有些太快了,因此我要在做個計時器,當主角進入刺的區域(被刺) 1秒後再回傳。

將程式碼改成下面這樣,當停留在區域內時,timer計時,如果超過1秒(自訂)就回傳,並且在回傳後或離開區域後重置timer。
https://ithelp.ithome.com.tw/upload/images/20200923/20130414pVeWPMzKgW.jpg
https://ithelp.ithome.com.tw/upload/images/20200923/201304147SPcAEtKOr.jpg


效果如下

是不是好很多了呢~ 至於把時間設定的變數設為公開的好處是,我們一樣能將這個這個TransbackTrigger設為Prefab重複使用,在不同位置可能會有不同的偵測時間。

例如很多人玩遊戲就喜歡一直往地圖外跑... 所以我通常會設一個大trigger在地圖下面,一碰到trigger就立刻回傳,這時候時間設定為0。

最後,如果想讓整體效果看起來更舒服,可以在回傳時加上適當的畫面漸暗漸亮效果,但因為和這篇文章內容不相關所以只在下面附上效果影片及程式碼,有興趣的讀者可以自行研究。


上一篇
[Day22]場景-架設地形
下一篇
[Day24] 豐饒系統
系列文
Unity遊戲開發與實踐-BlueRemedy內容分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言